import Vue from "vue";
import Router from "vue-router";

Vue.use(Router);

/* Layout */
import Layout from "@/layout";
import { title } from "@/settings";

/**
 * Note: sub-menu only appear when route children.length >= 1
 * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
 *
 * hidden: true                   if set true, item will not show in the sidebar(default is false)
 * alwaysShow: true               if set true, will always show the root menu
 *                                if not set alwaysShow, when item has more than one children route,
 *                                it will becomes nested mode, otherwise not show the root menu
 * redirect: noRedirect           if set noRedirect will no redirect in the breadcrumb
 * name:'router-name'             the name is used by <keep-alive> (must set!!!)
 * meta : {
    roles: ['admin','editor']    control the page roles (you can set multiple roles)
    title: 'title'               the name show in sidebar and breadcrumb (recommend set)
    icon: 'svg-name'/'el-icon-x' the icon show in the sidebar
    breadcrumb: false            if set false, the item will hidden in breadcrumb(default is true)
    activeMenu: '/example/list'  if set path, the sidebar will highlight the path you set
  }
 */

/**
 * constantRoutes
 * a base page that does not have permission requirements
 * all roles can be accessed
 */
export const constantRoutes = [
  {
    path: "/login", // 登录页面
    component: () => import("@/views/login/index"),
    hidden: true,
  },

  {
    path: "/loanapply", // 借款申请
    component: () => import("@/views/loanapply/index"),
    hidden: true,
  },

  {
    path: "/invest", // 投资组件
    component: () => import("@/views/invest/index"),
    hidden: true,
  },

  {
    path: "/register", // 注册组件
    component: () => import("@/views/register/index"),
    hidden: true,
  },

  {
    path: "/", // 首页
    component: () => import("@/views/home/index"),
    hidden: true,
  },

  {
    path: "/404",
    component: () => import("@/views/404"),
    hidden: true,
  },

  {
    path: "/dashboard", // 我的账户
    component: Layout,
    children: [
      {
        path: "", // 写空的话，就是默认访问我们的根地址
        name: "Dashboard",
        component: () => import("@/views/dashboard/index"),
        meta: { title: "个人主页", icon: "el-icon-user-solid" }, // 对应的就是页面名称和图标
      },
    ],
  },

  {
    path: "/award", // 奖励管理
    component: Layout,
    children: [
      {
        path: "award", // 写空的话，就是默认访问我们的根地址
        name: "Award",
        component: () => import("@/views/award/index"),
        meta: { title: "奖励管理", icon: "el-icon-sugar" }, // 对应的就是页面名称和图标
      },
    ],
  },

  {
    path: "/assetManage", // 资产管理
    component: Layout,
    // 重定向
    redirect: "/assetManage/collection",
    // 设置上一级的图标和名称,只有两个或者两个以上的模块才会显示上一级的图标
    meta: { title: "资产管理", icon: "el-icon-s-finance" },
    // 设置子路由
    children: [
      {
        path: "collection",
        name: "Collection",
        component: () => import("@/views/assetManage/collection"), // 资产统计的模块
        meta: { title: "资产统计", icon: "el-icon-pie-chart" }, // 对应的就是页面名称和图标
      },
      {
        path: "recharge",
        name: "Recharge",
        component: () => import("@/views/assetManage/recharge"), // 充值的模块
        meta: { title: "充值", icon: "el-icon-circle-plus-outline" }, // 对应的就是页面名称和图标
      },
      {
        path: "extract",
        name: "Extract",
        component: () => import("@/views/assetManage/extract"), // 提现的模块
        meta: { title: "提现", icon: "el-icon-remove-outline" }, // 对应的就是页面名称和图标
      },
    ],
  },

  {
    path: "/investManage", // 投资管理
    component: Layout,
    // 重定向
    redirect: "/investManage/collection",
    // 设置上一级的图标和名称,只有两个或者两个以上的模块才会显示上一级的图标
    meta: { title: "投资管理", icon: "el-icon-goods" },
    // 设置子路由
    children: [
      {
        path: "myInvest",
        name: "MyInvest",
        component: () => import("@/views/investManage/myinvest"), // 我的投资的模块
        meta: { title: "我的投资", icon: "el-icon-tickets" }, // 对应的就是页面名称和图标
      },
      {
        path: "dealRecord",
        name: "DealRecord",
        component: () => import("@/views/investManage/dealRecord"), // 交易记录的模块
        meta: { title: "交易记录", icon: "el-icon-sort" }, // 对应的就是页面名称和图标
      },
      {
        path: "exceptedReturn",
        name: "ExceptedReturn",
        component: () => import("@/views/investManage/exceptedReturn"), // 预期收益的模块
        meta: { title: "预期收益", icon: "el-icon-money" }, // 对应的就是页面名称和图标
      },
    ],
  },

  {
    path: "/account", // 银行卡
    component: Layout,
    // 重定向
    redirect: "/account/card",
    // 设置上一级的图标和名称,只有两个或者两个以上的模块才会显示上一级的图标
    meta: { title: "账号设置", icon: "el-icon-s-tools" },
    children: [
      {
        path: "safe",
        name: "Safe",
        component: () => import("@/views/account/safe"), // 安全设置的模块
        meta: { title: "安全设置", icon: "el-icon-user" }, // 对应的就是页面名称和图标
      },
      {
        path: "card",
        name: "Card",
        component: () => import("@/views/account/card"), // 银行卡的模块
        meta: { title: "银行卡", icon: "el-icon-bank-card" }, // 对应的就是页面名称和图标
      },
    ],
  },

  // 404 page must be placed at the end !!!
  { path: "*", redirect: "/404", hidden: true },
];

// 管理员才能看到的
export const asyncRoutes = [
  {
    path: "/product", // 产品管理
    component: Layout,
    children: [
      {
        path: "", // 写空的话，就是默认访问我们的根地址
        name: "Product",
        component: () => import("@/views/productManage/index"),
        // roles后面接只有谁能看到
        // 如果想在整个的管理模块只能管理员来用的话，就在最上面的mtea加roles:['admin'] 
        meta: { title: "产品管理", icon: "el-icon-suitcase" ,roles:['admin']}, // 对应的就是页面名称和图标
      },
    ],
  },

  {
    path: "/loanManage", // 借款审批
    component: Layout,
    // 重定向
    redirect: "/loanManage/approve",
    // 设置上一级的图标和名称,只有两个或者两个以上的模块才会显示上一级的图标
    meta: { title: "借款管理", icon: "el-icon-s-fold" },
    children: [
      {
        path: "approve",
        name: "Approve",
        component: () => import("@/views/loanManage/loanApprove"), // 信息发送的模块
        meta: { title: "借款审批", icon: "el-icon-open",roles:['admin'] }, // 对应的就是页面名称和图标
      },
      {
        path: "myLoan",
        name: "MyLoan",
        component: () => import("@/views/loanManage/myLoan"), // 我的借款的模块
        meta: { title: "我的借款", icon: "el-icon-tickets" }, // 对应的就是页面名称和图标
      },
    ],
  },

  {
    path: "/message", // 消息管理
    component: Layout,
    // 重定向
    redirect: "/message/card",
    // 设置上一级的图标和名称,只有两个或者两个以上的模块才会显示上一级的图标
    meta: { title: "消息管理", icon: "el-icon-message" },
    children: [
      {
        path: "send",
        name: "Send",
        component: () => import("@/views/message/send"), // 信息发送的模块
        meta: { title: "消息发送", icon: "el-icon-chat-dot-round",roles:['admin'] }, // 对应的就是页面名称和图标
      },
      {
        path: "myMsg",
        name: "MyMsg",
        component: () => import("@/views/message/myMsg"), // 我的消息的模块
        meta: { title: "我的消息", icon: "el-icon-chat-line-round" }, // 对应的就是页面名称和图标
      },
    ],
  },

  {
    path: "/debt", // 债权管理
    component: Layout,
    children: [
      {
        path: "debt", // 写空的话，就是默认访问我们的根地址
        name: "Debt",
        component: () => import("@/views/debt/index"),
        meta: { title: "债权管理", icon: "el-icon-s-unfold",roles:['admin'] }, // 对应的就是页面名称和图标
      },
    ],
  },

  {
    path: "/match", // 撮合管理
    component: Layout,
    // 重定向
    redirect: "/match/approve",
    // 设置上一级的图标和名称,只有两个或者两个以上的模块才会显示上一级的图标
    // 如果想在整个的管理模块只能管理员来用的话，就在最上面的mtea加roles:['admin'] 
    meta: { title: "撮合管理", icon: "el-icon-connection" ,roles:['admin'] }, 
    children: [
      {
        path: "funds",
        name: "Funds",
        component: () => import("@/views/match/funds"), // 信息发送的模块
        meta: { title: "资金队列", icon: "el-icon-guide" }, // 对应的就是页面名称和图标
      },
      {
        path: "matchedResult",
        name: "MatchedResult",
        component: () => import("@/views/match/matchedResult"),
        meta: { title: "匹配结果", icon: "el-icon-tickets" },
      },
    ],
  },

  // 404 page must be placed at the end !!!
  { path: "*", redirect: "/404", hidden: true },
];

const createRouter = () =>
  new Router({
    // mode: 'history', // require service support
    scrollBehavior: () => ({ y: 0 }),
    routes: constantRoutes,
  });

const router = createRouter();

// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export function resetRouter() {
  const newRouter = createRouter();
  router.matcher = newRouter.matcher; // reset router
}

export default router;
